#include "../include/server.h"

int query_dir(int ownerID, int curDirID, pFileInfo files[])
{
    //传入parentID和文件所有者的id
    //找出目录下所有的文件
    //如果存在，获取文件名、文件大小以及文件类型
    //返回目录下文件的个数

	MYSQL *conn;
	MYSQL_RES *res;
	MYSQL_ROW row;
	char *server = "localhost";
	char *user = "root";
	char *password = "1234";
	char *database = "netdisk";//要访问的数据库名称
	char query[600] = "select filename,filesize,type from file where parent_id=";

    //===========所需变量============
    int fileCnt = 0;

	unsigned int queryRet;
    //将搜索语句拼接起来
	sprintf(query, "%s%d and owner_id=%d", query, curDirID, ownerID);

    //在输出前先打印查询语句
	/* puts(query); */

    //初始化
	conn = mysql_init(NULL);
    if(!conn)
    {
        printf("MySQL init failed\n");
        return -1;
    }

    //连接数据库，看连接是否成功，只有成功才能进行后面的操作
	if(!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))
	{
		printf("Error connecting to database: %s\n", mysql_error(conn));
		return -1;
	}
    else
    {
		/* printf("MySQL Connected...\n"); */
	}

    //==============连接成功，把SQL语句传递给MySQL================
	queryRet = mysql_query(conn, query);
	if(queryRet)
	{
		printf("Error making query: %s\n", mysql_error(conn));
	}
    else
    {
    
        //用mysql_num_rows可以得到查询的结果集有几行
        //要配合mysql_store_result使用
        //第一种判断方式
        res = mysql_store_result(conn);
        /* printf("mysql_num_rows = %lu\n", (unsigned long)mysql_num_rows(res)); */
        int colnum = (int)mysql_num_rows(res);

        //第二种判断方式,两种方式不能一起使用
		/* res = mysql_use_result(conn); */
            
        row = mysql_fetch_row(res);
		if(NULL == row)
        {
            //如果传入的文件名不在file表中，返回0
            printf("Don't find any data\n");
            return fileCnt;
        }
        else
		{
            //获取数据库中的相应的数据
            //filename,filesize,type
            do{
                if(fileCnt == colnum){
                    break;
                }
                queryRet = 0;
                memcpy(files[fileCnt]->fileName, row[queryRet], sizeof(files[fileCnt]->fileName));
                ++queryRet;
                files[fileCnt]->fileSize = atoi(row[queryRet++]);
                files[fileCnt]->type = *row[queryRet];
                /* printf("filename = %s, filesize = %ld, filetype = %c\n", */
                /*        files[fileCnt]->fileName, files[fileCnt]->fileSize, files[fileCnt]->type); */
                ++fileCnt;
                /* printf("fileCnt = %d\n", fileCnt); */
            }while(NULL != (row = mysql_fetch_row(res)));
        }
        mysql_free_result(res);
	}

	/* mysql_close(conn); */

	return fileCnt;
}
